Do not spin on locks that may be held by stop_machine_run() callers.
authorKeir Fraser <keir.fraser@citrix.com>
Mon, 22 Mar 2010 10:29:13 +0000 (10:29 +0000)
committerKeir Fraser <keir.fraser@citrix.com>
Mon, 22 Mar 2010 10:29:13 +0000 (10:29 +0000)
commit21980127e69600d3cbf6a0289989e29317b04c94
tree08b89728e504f2e7b62080614945db2eab5360cc
parent078632963422644ee3a52f7d0fecb4af1026c235
Do not spin on locks that may be held by stop_machine_run() callers.

Currently stop_machine_run() will try to bring all CPUs to softirq
context, with some locks held, like xenpf_lock or cpu_add_remove_lock
etc. However, if another CPU is trying to get these locks, it may
cause deadlock.

This patch replace all such spin_lock with spin_trylock. For
xenpf_lock and sysctl_lock, we try to use hypercall_continuation, so
that we will not cause trouble to user space tools. For
cpu_hot_remove_lock, we simply return EBUSY if failure, since it will
only impact small number of user space tools.

In the end, we should try to make the stop_machine_run as spinlock
free.

Signed-off-by: Jiang, Yunhong <yunhong.jiang@intel.com>
xen/arch/x86/platform_hypercall.c
xen/arch/x86/smpboot.c
xen/common/sysctl.c